package miage.rest.routing;

import java.util.logging.Level;
import miage.rest.resource.ResourceFinder;
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.PicoContainer;
import org.restlet.resource.Finder;
import org.restlet.resource.ServerResource;

/**
 * Classe représentant un routeur pouvant créer des ressource
 * en utilisant le finder de ressource de restlet et le conteneur de dépendances
 */
class Router extends org.restlet.routing.Router {
	
	private final PicoContainer container;

	/**
	 * Ce type de router ne peut être créer que par la classe RouterFactory
	 * d'où la visilité "package"
	 * 
	 * @param Le conteneur de dépendances
	 */
	Router(PicoContainer container) {
		this.container = container;
	}

	/**
	 * Création d'un finder pour l'instanciation de la classe targetClass
	 * @param targetClass
	 * @return une instance de ResourceFinder
	 */
	@Override
	public Finder createFinder(Class<?> targetClass) {
		Finder result = null;
		if (ServerResource.class.isAssignableFrom(targetClass)) {
			result = new ResourceFinder((MutablePicoContainer) container, getContext(), targetClass);
		} else {
			if (this.getLogger() != null) {
                this.getLogger().log(
							Level.WARNING,
							"Cannot create a Finder for the given target class, since it is neither a subclass of Resource nor a subclass of ServerResource.");
            }
		}

		return result;
	}
}